﻿Imports System.IO
Imports System.Net
Imports System.Text
Imports Newtonsoft.Json

Public Class HttpHelp
    Dim AccessToken As String = ""

    Shared Function AllHttpRequest(ByVal url As String, ByVal verb As String, ByVal postVars As String) As String
        Dim result As String = Nothing

        Try
            Dim req As HttpWebRequest = TryCast(WebRequest.Create(New Uri(url)), HttpWebRequest)
            req.Method = verb
            req.ContentType = "application/json; charset=UTF-8"
            req.Accept = "application/json; charset=UTF-8"


            If (verb.Equals("POST")) OrElse (verb.Equals("PUT")) Then
                Dim content As Byte() = Encoding.UTF8.GetBytes(postVars)
                req.ContentLength = content.Length
                Using post As Stream = req.GetRequestStream()
                    post.Write(content, 0, content.Length)
                End Using
            End If
            Using resp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
                Dim reader As New StreamReader(resp.GetResponseStream())
                result = reader.ReadToEnd()
                reader.Close()
            End Using
        Catch [error] As WebException
        End Try
        Return result
    End Function

    Public Function AllGETHttpRequest(ByVal url As String, ByVal postVars As String) As String
        Dim result As String = Nothing
        Try
            ' postVars = "UserName=admin&Password=123"; 
            url = String.Format(url + "?{0}", postVars)
            Dim req As HttpWebRequest = TryCast(WebRequest.Create(New Uri(url)), HttpWebRequest)
            req.Method = "GET"
            'req.ContentType = "application/json; charset=UTF-8"
            'req.Accept = "application/json; charset=UTF-8"


            Using resp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
                Dim reader As New StreamReader(resp.GetResponseStream())
                result = reader.ReadToEnd()
                reader.Close()
            End Using
        Catch [error] As WebException
        End Try
        Return result
    End Function

    Public Function PostRequest(ByVal xmlRequest As String, ByVal postUrl As String) As String
        Dim xml As String = xmlRequest
        '实例化一个字符转码对象'
        Dim encoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")
        '创建一个web请求对象'
        Dim request As System.Net.WebRequest = System.Net.WebRequest.Create(postUrl)
        '设置请求方式为post'
        request.Method = "POST"
        '定义字节数组'
        Dim postdata() As System.Byte = encoding.GetBytes(xmlRequest)
        '设置request对象的请求字节的长度'
        request.ContentLength = postdata.Length
        '获取request对象的数据流'
        Dim requesstream As System.IO.Stream = request.GetRequestStream()
        '将数据内容填充到流中'
        requesstream.Write(postdata, 0, postdata.Length)
        '关闭流'
        requesstream.Close()
        '根据请求的request对象获取响应的response对象'
        Dim response As System.Net.WebResponse = request.GetResponse()
        '获取response数据流对象'
        Dim responsestream As StreamReader = New StreamReader(response.GetResponseStream())
        '将response流中的数据读取'
        Dim html As String = responsestream.ReadToEnd()
        requesstream.Close()
        response.Close()
        '返回本次请求的响应数据'
        Return html
    End Function

    Shared Function AllHttpUploadFile(ByVal url As String, ByVal filePath As String) As String
        Dim result As String = Nothing
        Try
            Dim boundary As String = Path.GetRandomFileName
            Dim header As New StringBuilder()
            header.AppendLine("--" & boundary)
            header.Append("Content-Disposition: form-data; name=""file"";")
            header.AppendFormat("filename=""{0}""", IO.Path.GetFileName(filePath))
            header.AppendLine()
            header.AppendLine("Content-Type: application/octet-stream")
            header.AppendLine()

            Dim headerbytes() As Byte = Encoding.UTF8.GetBytes(header.ToString)
            Dim endboundarybytes() As Byte = Encoding.ASCII.GetBytes(vbNewLine & "--" & boundary & "--" & vbNewLine)

            Dim req As HttpWebRequest = TryCast(WebRequest.Create(New Uri(url)), HttpWebRequest)
            req.ContentType = "multipart/form-data; boundary=" & boundary
            req.ContentLength = headerbytes.Length + New System.IO.FileInfo(filePath).Length + endboundarybytes.Length
            req.AllowWriteStreamBuffering = False

            req.Method = "POST"

            Using s As Stream = req.GetRequestStream()
                s.Write(headerbytes, 0, headerbytes.Length)
                Dim filebytes() As Byte = My.Computer.FileSystem.ReadAllBytes(filePath)
                s.Write(filebytes, 0, filebytes.Length)
                s.Write(endboundarybytes, 0, endboundarybytes.Length)
            End Using

            Using resp As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse)
                Dim reader As New StreamReader(resp.GetResponseStream())
                result = reader.ReadToEnd()
                reader.Close()
            End Using
        Catch ex As WebException
            Return ex.Message
        End Try
        Return result
    End Function



End Class